/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.Ufes.exeSwing.Presenter;

import edu.Ufes.exeSwing.Collection.DiretorRegionalCollection;
import edu.Ufes.exeSwing.Model.Diretor;
import edu.Ufes.exeSwing.Persistence.DiretorRegionalPersistence;
import edu.Ufes.exeSwing.View.InclusaoDiretorRegionalView;
import edu.Ufes.exeSwing.View.ListaDiretoresRegionaisView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.TreeSet;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author bhetynnacatalunha
 */
public class DiretorRegionalPresenter {

    InclusaoDiretorRegionalView inclusaoDiretorRegionalView;
    DiretorRegionalCollection diretores;
    ListaDiretoresRegionaisView listaDiretoresRegionaisView;
    DefaultTableModel tm;

    public DiretorRegionalPresenter() {
        inclusaoDiretorRegionalView = new InclusaoDiretorRegionalView();
        diretores = new DiretorRegionalCollection(new DiretorRegionalPersistence());
        listaDiretoresRegionaisView = new ListaDiretoresRegionaisView();

        inclusaoDiretorRegionalView.getBtnCancelar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoDiretorRegionalView.dispose();
            }
        });

        inclusaoDiretorRegionalView.getBtnSalvar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                salvar();
            }
        });

        listaDiretoresRegionaisView.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                listaDiretoresRegionaisView.dispose();
            }
        });

        listaDiretoresRegionaisView.getBtnNova().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                inclusaoDiretorRegionalView.getTxtCPF().setText("");
                inclusaoDiretorRegionalView.getTxtNome().setText("");
                inclusaoDiretorRegionalView.getTxtDataNascimento().setText("");
                inclusaoDiretorRegionalView.getTxtEndereco().setText("");
                inclusaoDiretorRegionalView.getTxtNomeUsuario().setText("");
                inclusaoDiretorRegionalView.setVisible(true);
            }
        });

        listaDiretoresRegionaisView.getBtnEditar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                editar();
            }
        });

        listaDiretoresRegionaisView.getBtnExcluir().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                excluir();
            }
        });

        listaDiretoresRegionaisView.getBtnPesquisar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                pesquisar();
            }
        });
        
        inclusaoDiretorRegionalView.getBtnRedefinir().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                redefinirRegional();
            }
        });
        
        
        inclusaoDiretorRegionalView.getBtnRedefinir().setVisible(false);

        carregaDiretoresRegionais(diretores.getTodosDiretoresRegionais());

        listaDiretoresRegionaisView.setVisible(true);

    }

    
    private void redefinirRegional(){
        String cpf = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 2);    
        Diretor d = diretores.getUmDiretorRegional(cpf);
        DefinirRegionalPresenter definirRegionalPresenter = new DefinirRegionalPresenter(d);

        
    }
    
    private void pesquisar() {
        tm.setNumRows(0);
        TreeSet<Diretor> diretores1 = this.diretores.getTodosDiretoresRegionais();
        Iterator<Diretor> it = diretores1.iterator();
        while (it.hasNext()) {
            Diretor a = it.next();
            int fim = listaDiretoresRegionaisView.getTxtFiltro().getText().length();

            String cidade = a.getNome();
            String filtro = listaDiretoresRegionaisView.getTxtFiltro().getText();

            if (cidade.length() < fim) {
                fim = cidade.length();
            }

            if (cidade.substring(0, fim).toUpperCase().equals(filtro.toUpperCase())) {
                String linha = a.toString();
                String valores[] = linha.split("#");
                tm.addRow(valores);
            }


        }
    }

    private void carregaDiretoresRegionais(TreeSet diretores) {
        tm = new DefaultTableModel(new Object[][]{}, new String[]{"Nome", "Nome do Usuario", "CPF", "Endereco", "Data de Nascimento", "Regiao"}) {
            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };
        tm.setNumRows(0);
        Iterator<Diretor> it = diretores.iterator();
        while (it.hasNext()) {
            Diretor d = it.next();
            String linha = d.toString();
            String valores[] = linha.split("#");
            tm.addRow(valores);
        }
        this.listaDiretoresRegionaisView.getTblDiretoresRegionais().setModel(tm);
    }

    private void salvar() {
        Diretor diretor = new Diretor(null, null, null, null, null, null);
        diretor.setCPF(inclusaoDiretorRegionalView.getTxtCPF().getText().toString());
        diretor.setEndereco(inclusaoDiretorRegionalView.getTxtEndereco().getText().toString());
        diretor.setNome(inclusaoDiretorRegionalView.getTxtNome().getText().toString());
        diretor.setDataNascimento(inclusaoDiretorRegionalView.getTxtDataNascimento().getText().toString());
        diretor.setNomeUsuario(inclusaoDiretorRegionalView.getTxtNomeUsuario().getText().toString());

        if (diretor.getCPF().isEmpty() || diretor.getNomeUsuario().isEmpty() || diretor.getDataNascimento().isEmpty() || diretor.getNome().isEmpty() || diretor.getEndereco().isEmpty()) {
            JOptionPane.showMessageDialog(inclusaoDiretorRegionalView, "Preencha os campos em Branco");
        } else {
            diretores.excluirDiretor(diretor);
            diretores.incluirDiretor(diretor);
            this.carregaDiretoresRegionais(diretores.getTodosDiretoresRegionais());
            inclusaoDiretorRegionalView.dispose();
            JOptionPane.showMessageDialog(listaDiretoresRegionaisView, "Diretor Regional Salvo com Sucesso");
        }
    }

    private void editar() {
        if (listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow() != -1) {
            String nome = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 0);
            String nomeUsuario = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 1);
            String cpf = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 2);
            String endereco = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 3);
            String dataAniversario = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 4);
            Diretor diretor = new Diretor(nome, null, cpf, endereco, dataAniversario, nomeUsuario);
            inclusaoDiretorRegionalView.getTxtCPF().setText(cpf);
            inclusaoDiretorRegionalView.getTxtCPF().setEnabled(false);
            inclusaoDiretorRegionalView.getTxtDataNascimento().setText(dataAniversario);
            inclusaoDiretorRegionalView.getTxtEndereco().setText(endereco);
            inclusaoDiretorRegionalView.getTxtNome().setText(nome);
            inclusaoDiretorRegionalView.getTxtNomeUsuario().setText(nomeUsuario);
            inclusaoDiretorRegionalView.getBtnRedefinir().setVisible(true);
            inclusaoDiretorRegionalView.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(inclusaoDiretorRegionalView, "Selecione uma linha");
        }


    }

    private void excluir() {
        if (listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow() != -1) {
            if (JOptionPane.showConfirmDialog(listaDiretoresRegionaisView, "Deseja mesmo excluir este Diretor?") == 0) {
                String nome = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 0);
                String nomeUsuario = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 1);
                String cpf = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 2);
                String endereco = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 3);
                String dataAniversario = (String) listaDiretoresRegionaisView.getTblDiretoresRegionais().getValueAt(listaDiretoresRegionaisView.getTblDiretoresRegionais().getSelectedRow(), 4);
                Diretor diretor = new Diretor(nome, null, cpf, endereco, dataAniversario, nomeUsuario);
                diretores.excluirDiretor(diretor);
                this.carregaDiretoresRegionais(diretores.getTodosDiretoresRegionais());
                JOptionPane.showMessageDialog(listaDiretoresRegionaisView, "Diretor excluido com Sucesso!");
            }
        } else {
            JOptionPane.showMessageDialog(listaDiretoresRegionaisView, "Selecione uma linha");
        }
    }
}
